#ifndef SUNDRY_H
#define SUNDRY_H

#include <QString>
#include <QByteArray>

#include <vector>

#include <QSerialPortInfo>

/**
 * @brief 编码枚举
 * @note 我这里数值为 Windows 对应代码页的数
 */
enum EncodingEnum
{
    UTF8 = 65001,
    GB18030 = 54936
};

/**
 * @brief 得到本地编码
 * @return 代表编码枚举
 */
EncodingEnum getLocalEncoding(void);

/**
 * @brief 得到对应编码的字符串
 * @param encoding 编码枚举
 * @return 对应的编码字符串
 * @note 之后被 QTextCodec 使用
 */
QByteArray getEncodingString(EncodingEnum encoding);

/**
 * @brief 由 QByteArray 得到 Hex 字符串
 * @param data QByteArray 数据
 * @return 对应 Hex 字符串
 */
QString byteArrayToHexSpaced(const QByteArray& data);

/**
 * @brief 从 Hex 字符串还原 QByteArray
 * @param hexStr Hex 字符串
 * @return QByteArray 数据
 */
QByteArray hexSpacedToByteArray(const QString& hexStr);

/**
 * @brief 检查一个字符串是否为有效的十六进制字节序列
 * @param theString 待检查的字符串
 * @return true 如果是合法的十六进制序列
 * @note 每个字节必须是两个十六进制字符，如 "00 35 FF"（空格分隔）
 */
bool isValidHexSequence(const QString &theSymbol);


/**
 * @brief 读取CSV表格文件内容
 * @param filePath 文件完整路径
 * @return 表格中的数据
 * @note 此函数只读取数据，不处理编码
 */
std::vector<std::vector<std::string>> readCSVFile(const std::string& filePath);

/**
 * @brief 在串口信息列表中查找串口信息
 * @param targetPort 目标
 * @param portList 串口信息列表
 * @return 成功 索引 失败 -1
 * @note 不是按字节比较
 */
int findPortInfoIndex(const QSerialPortInfo& targetPort, const QList<QSerialPortInfo>& portList);



#endif // SUNDRY_H
